package Test4;/*
class Cat {
//不能用var来声明字段:
//    public var name;
    //不能用var声明方法返回类型和形式参数
    public var eat(var str) {
        //用var声明变量必须初始化,但是不能初始化为null
        var name;
        var name=null;
    }
}
*/

/*
当一个类被final修饰时,它便不能被其他的类继承了
但若是我们把该类从final类型改为sealed类型时,它依然可以达到密封效果,且可以通过在类名后面加上permits以允许某些类继承自己

被sealed修饰的类的子类必须有final,sealed或non-sealed之一修饰
    1) final表示不能继续被继承
    2) sealed表示它自己也是一个密封类,要重蹈它父类的覆辙
    3) non-sealed表示解开密封限制,任何类都可以继承
 */
sealed class Person permits GB{

}
sealed class GB extends Person permits AB{

}
final class AB extends GB {

}

interface A {
    // 1.抽象方法,接口中最核心,最传统的方法,没有方法体{},子类必须提供具体实现
    void test3();
    // 2.static方法,有方法体,属于接口本身,直接通过接口名调用,主要提供工具方法
    static void test(){};
    // 3.default方法,有方法体,主要目的是接口演化,即向现有接口添加新方法而不破坏已有的实现类
    default void test1(){};
    // 4.private方法，有方法体。只能在接口内部被调用，
    // 主要用于提取默认方法或静态方法中的公共代码，实现代码复用和减少重复。
    private void test2(){};
}

public class Test {
    public static void main(String[] args) {
        //编译器能根据你赋的值自动推断出该变量的类型
        var name="zhangsan";
        var age=10;
        /*
        为什么使用var?
        --有的类型名可能很长,例如泛型,var就像一个简化其,让你不必反复写繁琐的类型名,从而使代码更简洁
         */


    }
}
